bitkeeper revision 1.1076 (40f3f7b4Cj4P09-PODiTO2MMFlKicw)
authormjw@wray-m-3.hpl.hp.com <mjw@wray-m-3.hpl.hp.com>
Tue, 13 Jul 2004 14:54:44 +0000 (14:54 +0000)
committermjw@wray-m-3.hpl.hp.com <mjw@wray-m-3.hpl.hp.com>
Tue, 13 Jul 2004 14:54:44 +0000 (14:54 +0000)
Add device create and device destroy for an existing domain.

tools/python/xen/xend/XendClient.py
tools/python/xen/xend/XendDomain.py
tools/python/xen/xend/server/SrvDomain.py
tools/python/xen/xend/server/blkif.py
tools/python/xen/xm/create.py

index a6077ab20d8155641a6513d37b6f34ebda28dc38..e412c1e74934642ffaca1f3d30df37786cfa9a81 100644 (file)
@@ -316,6 +316,17 @@ class Xend:
                         {'op'       : 'vbd',
                          'vbd'      : vbd })
 
+    def xend_domain_device_create(self, id, config):
+        return xend_call(self.domainurl(id),
+                         {'op'      : 'device_create',
+                          'config'  : fileof(config) })
+
+    def xend_domain_device_destroy(self, id, type, idx):
+        return xend_call(self.domainurl(id),
+                         {'op'      : 'device_destroy',
+                          'type'    : type,
+                          'index'   : idx })
+
     def xend_consoles(self):
         return xend_get(self.consoleurl())
 
index 7a9ab8d7f3f1f0775f5f039f2cd303382bc9ddfa..a1841b03b4dfbed49b65a4fb28931d046a65f03c 100644 (file)
@@ -320,6 +320,7 @@ class XendDomain:
         @param config: configuration
         @return: deferred
         """
+        print 'domain_configure>', id, config
         dom = int(id)
         dominfo = self.domain_get(dom)
         if not dominfo:
@@ -498,9 +499,12 @@ class XendDomain:
         """
         # Need a cancel too?
         # Don't forget to cancel restart for it.
+        print 'domain_migrate>', id, dst
         dom = int(id)
         xmigrate = XendMigrate.instance()
-        return xmigrate.migrate_begin(dom, dst)
+        val = xmigrate.migrate_begin(dom, dst)
+        print 'domain_migrate<', val
+        return val
 
     def domain_save(self, id, dst, progress=0):
         """Start saving a domain to file.
@@ -561,6 +565,21 @@ class XendDomain:
         dom = int(dom)
         return xc.atropos_domain_get(dom)
 
+    def domain_device_create(self, dom, devconfig):
+        dom = int(dom)
+        dominfo = self.domain_get(dom)
+        if not dominfo:
+            raise ValueError("invalid domain:" + str(dom))
+        return dominfo.device_create(devconfig)
+    
+
+    def domain_device_destroy(self, dom, type, idx):
+        dom = int(dom)
+        dominfo = self.domain_get(dom)
+        if not dominfo:
+            raise ValueError("invalid domain:" + str(dom))
+        return dominfo.device_destroy(type, idx)
+
     def domain_devtype_ls(self, dom, type):
         """Get list of device indexes for a domain.
 
index f938a5119ac4c287edf699835e9d07bc57dbcf02..3f01b6be97a1426527074a936c1a5d188d3aeb44 100644 (file)
@@ -75,23 +75,49 @@ class SrvDomain(SrvDir):
                     [['dom', 'int'],
                      ['destination', 'str']])
         deferred = fn(req.args, {'dom': self.dom.id})
+        print 'op_migrate>', deferred
         deferred.addCallback(self._op_migrate_cb, req)
         deferred.addErrback(self._op_migrate_err, req)
         return deferred
 
     def _op_migrate_cb(self, info, req):
+        print '_op_migrate_cb>', info, req
         #req.setResponseCode(http.ACCEPTED)
         host = info.dst_host
         port = info.dst_port
         dom  = info.dst_dom
         url = "http://%s:%d/xend/domain/%d" % (host, port, dom)
         req.setHeader("Location", url)
+        print '_op_migrate_cb> url=', url
         return url
 
     def _op_migrate_err(self, err, req):
+        print '_op_migrate_err>', err, req
         req.setResponseCode(http.BAD_REQUEST, "Error: "+ str(err))
         return str(err)
-        
+
+    def op_device_create(self, op, req):
+        fn = FormFn(self.xd.domain_device_create,
+                    [['dom', 'int'],
+                     ['config', 'sxpr']])
+        try:
+            d = fn(req.args, {'dom': self.dom.id})
+            d.addErrback(self._op_device_create_err, req)
+            return d
+        except ValueError, ex:
+            return ['err', str(ex)]
+
+    def _op_device_create_err(self, err, req):
+        return ['err', str(err)]
+
+    def op_device_destroy(self, op, req):
+        fn = FormFn(self.xd.domain_device_destroy,
+                    [['dom', 'int'],
+                     ['type', 'str'],
+                     ['index', 'int']])
+        val = fn(req.args, {'dom': self.dom.id})
+        return val
+                
     def op_pincpu(self, op, req):
         fn = FormFn(self.xd.domain_pincpu,
                     [['dom', 'int'],
index a6ca8788d46da15574215b42e723775e5b1b1e2f..e5f7091b67b504420ee16a09f58e67a5c856fffd 100755 (executable)
@@ -236,7 +236,6 @@ class BlkDev(controller.Dev):
         return val
 
     def destroy(self):
-        PrettyPrint.prettyprint(self.sxpr())
         self.controller.send_be_vbd_destroy(self.vdev)
         
 class BlkifController(controller.Controller):
index ea1d1b020dd13452dd88688916fabbd0bff02b18..c4e2567fe22f62a01fadfba7487b4735729c02e4 100644 (file)
@@ -246,7 +246,7 @@ def randomMAC():
             random.randint(0x00, 0x7f),
             random.randint(0x00, 0xff),
             random.randint(0x00, 0xff) ]
-    return ':'.join(map(lambda x: "%x" % x, mac))
+    return ':'.join(map(lambda x: "%02x" % x, mac))
 
 def configure_vifs(config_devs, vals):
     """Create the config for virtual network interfaces.